/**
 * 给定数组，若干区间增加操作，最后有一次区间查询求和。
 * 可以直接用差分数组，单点修改，最后再求回数组再求和即可
 * 可以不需要使用树状数组。
 * 使用线段树会MLE
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

struct FenwickTree{ // 树状数组

using value_type = long long int;
using vec_type = vector<value_type>;

int n;
vec_type c;

FenwickTree() = default;

static int lowbit(int x){return x & -x;}

void init(int nn){this->c.assign((this->n=nn) + 1, 0);}

void modify(int pos, value_type delta){
    for(int i=pos;i<=this->n;i+=lowbit(i)) this->c[i] += delta;
}

value_type query(int pos)const{
    value_type ans = 0;
    for(int i=pos;i;i-=lowbit(i)) ans += this->c[i];
    return ans;
}

value_type query(int s, int e)const{return this->query(e) - this->query(s - 1);}

}Bt;

using llt = long long;

int N, M;

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    cin >> N >> M;
    Bt.init(N + 1);
    long long pre = 0;
    for(int c,i=1;i<=N;++i){
        cin >> c;
        Bt.modify(i, c - pre);
        pre = c;
    }
    Bt.modify(N + 1, 0);
    for(int c,a,b,p,q=1;q<=M;++q){
        cin >> c >> a >> b >> p;
        if(c == 1){
            Bt.modify(a, -p);
            Bt.modify(b + 1, p);
        }else{
            Bt.modify(a, p);
            Bt.modify(b + 1, -p);
        }
    }
        
    vector<llt> vec(N + 2, 0);
    for(int i=1;i<=N;++i) vec[i] = Bt.query(i);

    int a, b; cin >> a >> b;
    auto ans = accumulate(vec.begin() + a, vec.begin() + b + 1, 0LL);
    cout << ans << endl;
    return 0;
}